package com.aqielife.demo.example.lambda;

@FunctionalInterface
interface IMath {
    int add(int x, int y);
}

@FunctionalInterface
interface IMath2 {
    int sub(int x, int y);
}

public class TypeDemo {
    public static void main(String[] args) {
        // 变量类型定义, 变量是接口类型
        IMath iMath = (x,y) -> x + y;

        // 数组里
        IMath[] lambdas = { (x, y) -> x + y };

        // 强转
        Object iMath2 = (IMath2)(x,y) -> x - y;

        // 返回类型
        IMath createLambda = createLambda();


        // 上面λ类似这种写法
        TypeDemo demo = new TypeDemo();
        // 当有二义性的时候，使用强转对应的接口解决
        demo.test((IMath) (x, y) -> x + y);

    }

    // 上面λ类似这种
    public void test(IMath math) {}
    public void test(IMath2 math) {}

    public static IMath createLambda() {
        return  (x, y) -> x + y;
    }

}
